import logging
from fastapi import APIRouter, Depends, Request
from fastapi.responses import JSONResponse
from typing import Optional
from sqlalchemy.ext.asyncio import AsyncSession
from database.MysqlUtils import get_db
from database.mysql.usercrud import create_or_get_user, get_user_by_id
from mrouter.domain.WxCloudRunHeader import WxCloudRunHeader
from utils.response import (
    success_response, unauthorized_response, internal_error_response
)

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger("user_api")

# 创建路由
router = APIRouter(
    prefix="/user",
    tags=["user_api"],
    responses={404: {"description": "Not found"}},
)

# 获取用户信息接口
@router.get("/info")
async def get_user_info(
    request: Request,
    db: AsyncSession = Depends(get_db)
):
    """
    根据unionid获取用户信息
    
    返回:
    - code: 状态码，0表示成功
    - message: 状态信息
    - data: 包含用户信息
        - id: 用户表主键id
        - energy: 当前能量值
        - generate_count: 可生成图片次数（10能量一次）
        - created_at: 用户创建时间
    """
    try:
        # 从请求头获取用户ID
        user_id = await WxCloudRunHeader.get_unionid(request)
        if not user_id:
            logger.warning("未能从请求头获取unionid，拒绝访问")
            return unauthorized_response("非法用户，请登录后再试")
        
        # 获取或创建用户（新用户自动初始化30能量）
        user = await create_or_get_user(db, user_id, initial_energy=30)
        
        # 计算可生成图片次数（10能量一次）
        generate_count = user.energy // 10
        
        logger.info(f"获取用户信息成功: {user_id}, 能量: {user.energy}, 可生成次数: {generate_count}")
        
        return success_response(data={
            "id": user.id,
            "energy": user.energy,
            "generate_count": generate_count,
            "created_at": user.created_at.strftime('%Y-%m-%d %H:%M:%S') if user.created_at else None
        })
    
    except Exception as e:
        logger.error(f"获取用户信息失败: {str(e)}", exc_info=True)
        return internal_error_response(f"获取用户信息失败: {str(e)}") 